package main

import (
	"fmt"
	"net"
)

type Server struct {
	Ip   string
	Port int
}

// NewServer 创建并返回一个新的 Server 实例。
func NewServer(ip string, port int) *Server {
	server := &Server{ip, port}
	return server
}

// HandleClient 处理与客户端的连接，可以在这里实现具体的业务逻辑。
func (server *Server) HandleClient(conn net.Conn) {
	defer conn.Close()
	fmt.Println("新客户端连接：", conn.RemoteAddr())
	// 这里可以添加更多的处理逻辑，例如读取客户端发送的消息、向客户端发送消息等
}

// Start 启动服务器，监听指定的 IP 地址和端口号。
func (server *Server) Start() {
	// 监听 TCP 连接
	listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", server.Ip, server.Port))
	if err != nil {
		fmt.Println("监听失败", err)
		return
	}

	// 确保在函数结束时关闭监听器
	defer listener.Close()

	for {
		// 接受客户端的连接请求
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("接受连接失败", err)
			continue
		}

		// 为每个连接启动一个 goroutine 来处理业务
		go server.HandleClient(conn)
	}
}
